﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;  
using System.Data;  
using System.Web.Security;  
using System.Web.UI.WebControls.WebParts;  
using System.Xml.Linq;
using System.Collections;
using System.Web.UI.HtmlControls;


namespace FrontEndPlus.Módulos.Inventarios
{
    public partial class wbfrm_Pedidos_Proveedores : System.Web.UI.Page
    {
        #region Variables

        private WCF_Gimnasio.cls_Proveedor _proveedor = new WCF_Gimnasio.cls_Proveedor();
        private WCF_Gimnasio.cls_Producto _producto = new WCF_Gimnasio.cls_Producto();
        private WCF_Gimnasio.cls_Pedidos _pedido = new WCF_Gimnasio.cls_Pedidos();
        private WCF_Gimnasio.ServiceClient _servicio = new WCF_Gimnasio.ServiceClient();
        private WCF_Gimnasio.cls_Contro_Alertas _alerta;

        private string lineaModificar = string.Empty;
        private String mensaje_error = String.Empty;


        #endregion
        #region Metodos
        private void Carga_Datos()
        {
            try
            {

                object resultado = new object();
                _proveedor.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                _servicio.OtrosProcesos(1, ref resultado, _proveedor);
                txt_factura.Text = resultado.ToString();
                gv_productos.DataSource = Session["dt"];
                gv_productos.DataBind();
                if (Session["descripcion"] != null)
                    txt_descripcion.Text = Session["descripcion"].ToString();
                if (Session["fecha"] != null)
                    txt_fecha.Text = Session["fecha"].ToString();
                else
                    txt_fecha.Text = DateTime.Now.Date.ToShortDateString();
                if (Session["pago"] != null)
                    ddl_tipo_pago.SelectedValue = Session["pago"].ToString();
                if (Request.QueryString["limpiar"] == "true")
                {
                    this.Limpiar_Cajas();
                }
                else
                {
                    if (Session["subtotal"] != null)
                        txt_subtotal.Text = Session["subtotal"].ToString();
                    if (Session["descuento"] != null)
                        txt_totalDescuento.Text = Session["descuento"].ToString();
                    if (Session["impuesto"] != null)
                        txt_impuestoTotal.Text = Session["impuesto"].ToString();
                    if (Session["total"] != null)
                        txt_total.Text = Session["total"].ToString();
                }
                lbl_mensaje.Text = String.Empty;
                lbl_mensaje1.Text = String.Empty;
                Session["inventario"] = "true";
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void Transferir_Datos()
        {
            try
            {
                Session["descripcion"] = txt_descripcion.Text;
                Session["fecha"] = txt_fecha.Text;
                Session["pago"] = ddl_tipo_pago.SelectedValue.ToString();
                Session["subtotal"] = txt_subtotal.Text;
                Session["descuento"] = txt_totalDescuento.Text;
                Session["impuesto"] = txt_impuestoTotal.Text;
                Session["total"] = txt_total.Text;
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }

        }
        private void Obtener_Datos_Producto()
        {
            try
            {
                if (lineaModificar == "")
                {
                    bool vd = false;
                    if (txt_id_articulo.Text != "")
                    {
                        _producto.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                        _producto.IdProducto = Convert.ToInt32(txt_id_articulo.Text);

                        _producto = (WCF_Gimnasio.cls_Producto)_servicio.TraerObjeto(_producto);

                        txt_costo.Text = _producto.PrecioCompra.ToString();
                        txt_utilidad.Text = string.Format("{0:N}", Convert.ToDouble(_producto.PorcentajeUtilidad));
                        txt_impuesto.Text = string.Format("{0:N}", Convert.ToDecimal(_producto.Impuesto));
                        txt_precio.Text = string.Format("{0:N}", Convert.ToDouble(txt_costo.Text) + (Convert.ToDouble(txt_costo.Text) * (Convert.ToDouble(txt_utilidad.Text) * 0.01)));
                        _producto.Impuesto = Convert.ToDecimal(txt_impuesto.Text);
                        if (_producto.CantidadActual >= _producto.Maximo)
                        {
                            txt_cantidad.Enabled = false;
                            lbl_mensaje.Text = "El Producto seleccionado ha llegado a su maximo permitido seleccione otro producto";
                        }
                        else
                        {
                            txt_cantidad.Enabled = true;
                            lbl_mensaje.Text = String.Empty;
                            RangeValidator1.MaximumValue = (_producto.Maximo - (int)_producto.CantidadActual).ToString();
                            RangeValidator1.ErrorMessage = "El maximo de articulos permitido para este producto en inventario es de " + _producto.Maximo + " cantidad actual: " + _producto.CantidadActual;
                        }
                        vd = true;

                    }

                    if (vd == true && txt_nombre_articulo.Text != "")
                    {
                        b_agregar.Enabled = true;
                        gv_productos.Enabled = true;
                    }
                    else
                    {
                        txt_precio.Text = string.Empty;
                        txt_costo.Text = string.Empty;
                        txt_utilidad.Text = string.Empty;
                        b_agregar.Enabled = false;
                    }
                }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        public DataTable Crear_DataTable()
        {
            DataTable dt = new DataTable();
            try
            {
                
                dt.Columns.Add("Id Articulo", typeof(string));
                dt.Columns.Add("Descripcion", typeof(string));
                dt.Columns.Add("Costo", typeof(string));
                dt.Columns.Add("Cantidad", typeof(string));
                dt.Columns.Add("Utilidad", typeof(string));
                dt.Columns.Add("Descuento", typeof(string));
                dt.Columns.Add("Impuesto", typeof(string));
                dt.Columns.Add("Precio", typeof(string));
                dt.Columns.Add("Total", typeof(string));
                
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
            return dt;
        }
        public DataRow Llenar_DataTable(DataRow Row1, ref decimal PrecioCompra, ref decimal SubTotal, ref decimal ImpuestoVenta, ref decimal PrecioVenta)
        {
            try
            {
                Row1["Id Articulo"] = txt_id_articulo.Text;
                Row1["Descripcion"] = txt_nombre_articulo.Text;
                Row1["Costo"] = string.Format("{0:N}", PrecioCompra);
                Row1["Cantidad"] = Math.Round(Convert.ToDecimal(txt_cantidad.Text), 2);
                Row1["Utilidad"] = Convert.ToDouble(txt_utilidad.Text);
                Row1["Descuento"] = string.Format("{0:N}", Convert.ToDecimal(SubTotal) * (Convert.ToDecimal(txt_descuento.Text) * Convert.ToDecimal(0.01)));
                Row1["Impuesto"] = string.Format("{0:N}", ((SubTotal - Convert.ToDecimal(Row1["Descuento"])) * ImpuestoVenta));
                Row1["Precio"] = string.Format("{0:N}", PrecioVenta);
                Row1["Total"] = string.Format("{0:N}", Convert.ToDouble(SubTotal));

                
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
            return Row1;
        }
        private void totalizarFactura()
        {
            try
            {
                double tSubtotal = 0;
                double tImpuesto = 0;
                double tDescuento = 0;
                for (int i = 0; i < gv_productos.Rows.Count; i++)
                {
                    tSubtotal += Convert.ToDouble(gv_productos.Rows[i].Cells[9].Text);
                    tImpuesto += Convert.ToDouble(gv_productos.Rows[i].Cells[7].Text);
                    tDescuento += Convert.ToDouble(gv_productos.Rows[i].Cells[6].Text);
                }
                txt_subtotal.Text = string.Format("{0:N}", tSubtotal);
                txt_impuestoTotal.Text = string.Format("{0:N}", tImpuesto);
                txt_totalDescuento.Text = string.Format("{0:N}", tDescuento);
                txt_total.Text = string.Format("{0:N}", Convert.ToInt32(tSubtotal + tImpuesto - tDescuento + 0.50));
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        
        private void Agregar_Producto_Grid()
        {
            try
            {
                if (!string.IsNullOrEmpty(txt_precio.Text) && !string.IsNullOrEmpty(txt_cod_articulo.Text) && !string.IsNullOrEmpty(txt_utilidad.Text))
                {
                    if (Convert.ToDecimal(txt_precio.Text) > 0)
                    {
                        if (Convert.ToDecimal(txt_utilidad.Text) > 0)
                        {
                            bool pasar = false;
                            for (int i = 0; i < gv_productos.Rows.Count; i++)
                            {
                                if (Convert.ToString(gv_productos.Rows[i].Cells[1].Text) == txt_id_articulo.Text)
                                    pasar = true;
                            }

                            if (pasar == false)
                            {
                                decimal PrecioCompra = Convert.ToDecimal(txt_costo.Text) - (Convert.ToDecimal(txt_costo.Text) * Convert.ToDecimal(txt_cantidad.Text) * Convert.ToDecimal(0.01));
                                decimal Utilidad = Convert.ToDecimal(txt_utilidad.Text) * Convert.ToDecimal(0.01);
                                decimal ImpuestoVenta = Convert.ToDecimal(txt_impuesto.Text) * Convert.ToDecimal(0.01);
                                decimal PrecioVenta = PrecioCompra + (PrecioCompra * Utilidad);
                                decimal SubTotal = Convert.ToDecimal(txt_costo.Text) * Convert.ToDecimal(txt_cantidad.Text);

                                if (Session["dt"] == null)
                                {
                                    DataTable dt = Crear_DataTable();
                                    DataRow Row1;
                                    Row1 = dt.NewRow();
                                    Row1 = this.Llenar_DataTable(Row1, ref PrecioCompra, ref SubTotal, ref ImpuestoVenta, ref PrecioVenta);
                                    dt.Rows.Add(Row1);

                                    gv_productos.DataSource = dt;
                                    gv_productos.DataBind();
                                    Session["dt"] = dt;
                                }
                                else
                                {
                                    DataTable dt = (Session["dt"]) as DataTable;
                                    DataRow Row1;
                                    Row1 = dt.NewRow();
                                    Row1 = this.Llenar_DataTable(Row1, ref PrecioCompra, ref SubTotal, ref ImpuestoVenta, ref PrecioVenta);
                                    dt.Rows.Add(Row1);
                                    gv_productos.DataSource = dt;
                                    gv_productos.DataBind();
                                    Session["dt"] = dt;
                                }

                                totalizarFactura();
                                txt_id_articulo.Text = string.Empty;
                                txt_cod_articulo.Text = string.Empty;
                                txt_nombre_articulo.Text = string.Empty;
                                txt_precio.Text = string.Empty;
                                txt_costo.Text = string.Empty;
                                txt_impuesto.Text = string.Empty;
                                txt_utilidad.Text = string.Empty;
                                txt_cantidad.Text = String.Empty;
                                b_agregar.Enabled = false;
                                b_guardar.Enabled = true;
                                this.deshabilitarHabilitarCampos(2);
                                RequiredFieldValidator2.Enabled = true;
                                RequiredFieldValidator4.Enabled = true;
                                ib_buscar_producto.Focus();

                            }
                            else
                                lbl_mensaje.Text = "CODIGO YA SE INGRESO UNA VEZ";
                        }
                        else
                            lbl_mensaje.Text = "UTILIDA DE VENTA NO PUEDE SER 0";
                    }
                    else
                        lbl_mensaje.Text = "PRECIO DEL ARTICULO NO PUEDE SER O";
                }
                else
                    lbl_mensaje.Text = "ERROR AL PROCESAR EL MONTO DEL PRODUCTO";
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void actualizarLineaGrid()
        {
            try
            {
                if (!string.IsNullOrEmpty(txt_precio.Text) && !string.IsNullOrEmpty(txt_cod_articulo.Text) && !string.IsNullOrEmpty(txt_utilidad.Text))
                {
                    if (Convert.ToDecimal(txt_precio.Text) > 0)
                    {
                        if (Convert.ToDecimal(txt_utilidad.Text) > 0)
                        {
                            bool pasar = false;
                            for (int i = 0; i < gv_productos.Rows.Count; i++)
                            {
                                if (Convert.ToString(gv_productos.Rows[i].Cells[1]) == txt_id_articulo.Text && Convert.ToString(gv_productos.Rows[gv_productos.SelectedRow.RowIndex].Cells[1]) != txt_id_articulo.Text)
                                    pasar = true;
                            }

                            if (pasar == false)
                            {
                                decimal PrecioCompra = Convert.ToDecimal(txt_costo.Text) - (Convert.ToDecimal(txt_costo.Text) * Convert.ToDecimal(txt_cantidad.Text) * Convert.ToDecimal(0.01));
                                decimal Utilidad = Convert.ToDecimal(txt_utilidad.Text) * Convert.ToDecimal(0.01);
                                decimal ImpuestoVenta = Convert.ToDecimal(txt_impuesto.Text) * Convert.ToDecimal(0.01);
                                decimal PrecioVenta = PrecioCompra + (PrecioCompra * Utilidad);
                                decimal SubTotal = Convert.ToDecimal(txt_costo.Text) * Convert.ToDecimal(txt_cantidad.Text);
                                int linea = -1;
                                for (int i = 0; i < gv_productos.Rows.Count; i++)
                                {
                                    if (gv_productos.Rows[i].Cells[1].Text == txt_id_articulo.Text)
                                        linea = gv_productos.Rows[i].RowIndex;
                                }
                                if (Session["dt"] != null)
                                {
                                    DataTable dt = (Session["dt"]) as DataTable;
                                    DataRow Row1;
                                    Row1 = dt.NewRow();
                                    Row1 = this.Llenar_DataTable(Row1, ref PrecioCompra, ref SubTotal, ref ImpuestoVenta, ref PrecioVenta);
                                    dt.Rows.RemoveAt(linea);
                                    dt.Rows.InsertAt(Row1, linea);
                                    gv_productos.DataSource = dt;
                                    gv_productos.DataBind();
                                    gv_productos.SelectedIndex = -1;
                                    Session["dt"] = dt;
                                }

                                totalizarFactura();
                                txt_id_articulo.Text = string.Empty;
                                txt_cod_articulo.Text = string.Empty;
                                txt_nombre_articulo.Text = string.Empty;
                                txt_precio.Text = string.Empty;
                                txt_costo.Text = string.Empty;
                                txt_impuesto.Text = string.Empty;
                                txt_utilidad.Text = string.Empty;
                                txt_cantidad.Text = String.Empty;
                                b_agregar.Enabled = false;
                                b_guardar.Enabled = true;
                                b_actualizar.Enabled = false;
                                b_borrar.Enabled = false;
                                this.deshabilitarHabilitarCampos(2);
                                RequiredFieldValidator2.Enabled = true;
                                RequiredFieldValidator4.Enabled = true;
                                ib_buscar_producto.Focus();

                            }
                            else
                                lbl_mensaje.Text = "CODIGO YA SE INGRESO UNA VEZ";
                        }
                        else
                            lbl_mensaje.Text = "UTILIDA DE VENTA NO PUEDE SER 0";
                    }
                    else
                        lbl_mensaje.Text = "PRECIO DEL ARTICULO NO PUEDE SER O";
                }
                else
                    lbl_mensaje.Text = "ERROR AL PROCESAR EL MONTO DEL PRODUCTO";
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void limpiarFormulario()
        {
            try
            {
                lbl_mensaje.Text = String.Empty;
                lbl_mensaje1.Text = String.Empty;
                lineaModificar = string.Empty;
                _producto = new WCF_Gimnasio.cls_Producto();
                gv_productos.Enabled = false;
                txt_costo.Text = string.Empty;
                txt_nombre_proveedor.Text = string.Empty;
                txt_idProveedor.Text = string.Empty;
                txt_impuestoTotal.Text = string.Empty;
                txt_totalDescuento.Text = string.Empty;
                txt_subtotal.Text = string.Empty;
                txt_utilidad.Text = string.Empty;
                txt_cantidad.Text = String.Empty;
                txt_id_articulo.Text = string.Empty;
                txt_cod_articulo.Text = String.Empty;
                txt_nombre_articulo.Text = string.Empty;
                txt_precio.Text = string.Empty;
                txt_impuesto.Text = string.Empty;
                txt_plazo.Text = string.Empty;
                txt_descuento.Text = String.Empty;
                txt_total.Text = string.Empty;
                b_agregar.Enabled = false;
                b_borrar.Enabled = false;
                Panel2.Enabled = false;
                Session["dt"] = null;
                gv_productos.DataSource = Session["dt"];
                gv_productos.DataBind();
                
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void finalizarPedidoProveedor()
        {
            try
            {
                if (ddl_tipo_pago.SelectedValue != "Seleccione...")
                {
                    if (!string.IsNullOrEmpty(txt_total.Text))
                    {
                        if (!string.IsNullOrEmpty(txt_factura.Text))
                        {
                            if (gv_productos.Rows.Count > 0)
                            {
                                if (Convert.ToDecimal(txt_total.Text) > 0)
                                {
                                    _pedido.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                                    _pedido.IdProveedor = Convert.ToInt32(txt_idProveedor.Text);

                                    _pedido.IdGimnasio = 1;
                                    _pedido.Numero_factura = txt_factura.Text;
                                    _pedido.Nota_Solicitud = txt_descripcion.Text;
                                    _pedido.FechaDocumento = Convert.ToDateTime(txt_fecha.Text);
                                    _pedido.FechaVencimiento = Convert.ToDateTime(txt_fecha.Text).AddDays(Convert.ToInt32(txt_plazo.Text));
                                    _pedido.SubTotal = Convert.ToDecimal(txt_subtotal.Text);
                                    _pedido.Descuento = Convert.ToDecimal(txt_totalDescuento.Text);
                                    _pedido.Impuesto = Convert.ToDecimal(txt_impuestoTotal.Text);
                                    _pedido.Total = Convert.ToDecimal(txt_total.Text);
                                    _pedido.Tipo_Factura = ddl_tipo_pago.SelectedIndex; //FACTURAS A CREDITO O CONTADO
                                    if (ddl_tipo_pago.SelectedIndex == 1)
                                    {
                                        _pedido.EstadoSolicitud = 13;//12 pend, 13 cancel
                                        _pedido.Saldo = 0;
                                    }
                                    else
                                        if (ddl_tipo_pago.SelectedIndex == 2)
                                        {
                                            _pedido.EstadoSolicitud = 12;
                                            _pedido.Saldo = Convert.ToDecimal(txt_total.Text);
                                        }

                                    WCF_Gimnasio.cls_Detalle_Pedidos[] _ArrayDetalle = new WCF_Gimnasio.cls_Detalle_Pedidos[gv_productos.Rows.Count];
                                    _ArrayDetalle = generaDetallesPedidoProveedor(_ArrayDetalle);


                                    _servicio.InsertarActualizarRegistro(true,ref mensaje_error, _pedido);
                                    _pedido.ArrayDetalle = _ArrayDetalle;
                                    _servicio.InsertarActualizarRegistro(true, ref mensaje_error, _pedido);
                                    object resultado = new object();
                                    _servicio.OtrosProcesos(2, ref resultado, _pedido);
                                    _servicio.OtrosProcesos(3, ref resultado, _pedido);
                                    limpiarFormulario();
                                    this.Carga_Datos();
                                    if (resultado.ToString() != String.Empty)
                                    {
                                        _alerta = new WCF_Gimnasio.cls_Contro_Alertas();
                                        _alerta.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());

                                        ExcelLibrary.DataSetHelper.CreateWorkbook("C:\\temp\\alertas.xls", _servicio.Listar(2, _alerta));
                                        DataSet ds = _servicio.Listar(3, _alerta);
                                        _alerta.Lista = ds.Tables[0];
                                        _alerta.Filtros = new string[1];
                                        _alerta.Filtros[0] = "1";
                                        object result = new object();
                                        _servicio.OtrosProcesos(1, ref result, _alerta);
                                        ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", resultado.ToString(), false);
                                        lbl_mensaje1.Text = "Pedido realizado satisfactoriamente";
                                    }
                                    else
                                    {
                                        string mensaje = "<script type='text/javascript'> smoke.alert('Pedido realizado satisfactoriamente', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                                        ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", mensaje, false);
                                    }
                                }
                                else
                                    lbl_mensaje.Text = "MONTO NO PUEDE SER NEGATIVO";
                            }
                            else
                                lbl_mensaje.Text = "DEBE INGRESAR ARTICULOS ANTES DE GENERAR FACTURA";
                        }
                        else
                            lbl_mensaje.Text = "EL NUMERO DE LA FACTURA NO PUEDE ESTAR EN BLANCO";
                    }
                    else
                        lbl_mensaje.Text = "ERROR AL PROCESAR EL TOTAL DE LA FACTURA";
                }
                else
                {
                    lbl_mensaje.Text = "DEBE SELECCIONAR TIPO DE PAGO";                    
                }
                    
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message+"\n"+mensaje_error; }
        }
        private WCF_Gimnasio.cls_Detalle_Pedidos[] generaDetallesPedidoProveedor(WCF_Gimnasio.cls_Detalle_Pedidos[] _ArrayDetalle)
        {
            try
            {
                int contadoArray = 0;
                for (int i = 0; i < gv_productos.Rows.Count; i++)
                {
                    object resultado = new object();
                    _producto.IdProducto = Convert.ToInt32(gv_productos.Rows[i].Cells[1].Text);
                    _servicio.OtrosProcesos(1, ref resultado, _producto);
                    decimal existencia = Convert.ToDecimal(resultado);

                    _ArrayDetalle[contadoArray] = new WCF_Gimnasio.cls_Detalle_Pedidos();
                    _ArrayDetalle[contadoArray].IdProducto = Convert.ToInt32(gv_productos.Rows[i].Cells[1].Text);
                    _ArrayDetalle[contadoArray].CantidadAnterior = existencia;
                    _ArrayDetalle[contadoArray].Cantidad = Convert.ToDecimal(gv_productos.Rows[i].Cells[4].Text);
                    _ArrayDetalle[contadoArray].CantidadNueva = existencia + Convert.ToDecimal(gv_productos.Rows[i].Cells[4].Text);
                    _ArrayDetalle[contadoArray].PrecioCompra = Convert.ToDecimal(gv_productos.Rows[i].Cells[3].Text);
                    _ArrayDetalle[contadoArray].PrecioVenta = Convert.ToDecimal(gv_productos.Rows[i].Cells[8].Text);
                    _ArrayDetalle[contadoArray].Impuesto = Convert.ToDecimal(gv_productos.Rows[i].Cells[7].Text);
                    _ArrayDetalle[contadoArray].DescuentoProducto = Convert.ToDecimal(gv_productos.Rows[i].Cells[6].Text);
                    _ArrayDetalle[contadoArray].PorcentajeUtilidad = Convert.ToDecimal(gv_productos.Rows[i].Cells[5].Text);
                    _ArrayDetalle[contadoArray].TotalProducto = Convert.ToDecimal(gv_productos.Rows[i].Cells[9].Text);
                    contadoArray += 1;

                }
                
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
            return _ArrayDetalle;
        }
        
        private void Borrar_Linea()
        {
            try
            {
                DataTable dt = (Session["dt"]) as DataTable;
                int linea = -1;
                for (int i = 0; i < gv_productos.Rows.Count; i++)
                {
                    if (gv_productos.Rows[i].Cells[1].Text == txt_id_articulo.Text)
                        linea = gv_productos.Rows[i].RowIndex;
                }
                dt.Rows.RemoveAt(linea);
                gv_productos.DataSource = dt;
                gv_productos.DataBind();
                Session["dt"] = dt;
               
                txt_id_articulo.Text = string.Empty;
                txt_cod_articulo.Text = string.Empty;
                txt_nombre_articulo.Text = string.Empty;
                txt_cantidad.Text = String.Empty;
                txt_descuento.Text = String.Empty;
                txt_costo.Text = String.Empty;
                txt_utilidad.Text = String.Empty;
                txt_impuesto.Text = String.Empty;
                txt_precio.Text = String.Empty;
                chk_exonerado.Checked = false;

                b_actualizar.Enabled = false;
                b_agregar.Enabled = false;
                b_borrar.Enabled = false;
                totalizarFactura();
                if (gv_productos.Rows.Count == 0)
                {
                    b_borrar.Enabled = false;
                    b_guardar.Enabled = false;
                }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void activaBotonesAgregarMoficar(int fila)
        {
            try
            {
                if (fila > -1)
                {
                    lineaModificar = fila.ToString();

                    txt_id_articulo.Text = gv_productos.Rows[fila].Cells[1].Text;
                    txt_cod_articulo.Text = Request.QueryString["codProd"];//gv_productos.Rows[fila].Cells[0].Text;
                    txt_costo.Text = gv_productos.Rows[fila].Cells[3].Text;
                    txt_nombre_articulo.Text = gv_productos.Rows[fila].Cells[2].Text;
                    txt_utilidad.Text = gv_productos.Rows[fila].Cells[5].Text;
                    txt_precio.Text = gv_productos.Rows[fila].Cells[8].Text;

                    if (Convert.ToDecimal(gv_productos.Rows[fila].Cells[7].Text) > 0)
                    {
                        txt_impuesto.Text = gv_productos.Rows[fila].Cells[7].Text;
                        chk_exonerado.Checked = false;
                    }
                    else
                    {
                        txt_impuesto.Text = "0";
                        chk_exonerado.Checked = true;
                    }
                    txt_cantidad.Text = (Math.Round(Convert.ToDecimal(gv_productos.Rows[fila].Cells[4].Text), 2)).ToString();
                    txt_cantidad.Focus();
                    b_actualizar.Enabled = true;
                    b_agregar.Enabled = false;
                    b_borrar.Enabled = true;
                    this.deshabilitarHabilitarCampos(1);
                    RequiredFieldValidator2.Enabled = false;
                    RequiredFieldValidator4.Enabled = false;
                }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        private void calculaPrecioProducto()
        {
            try
            {
                txt_precio.Text = string.Format("{0:N}", Convert.ToDecimal(txt_costo.Text) + (Convert.ToDecimal(txt_costo.Text) * (Convert.ToDecimal(txt_utilidad.Text) * Convert.ToDecimal(0.01))));
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
            catch { txt_precio.Text = ""; }
        }
        private void deshabilitarHabilitarCampos(int opcion)
        {
            try
            {
                if (opcion == 2)
                {
                    txt_cantidad.Enabled = false;
                    txt_descuento.Enabled = false;
                    txt_costo.Enabled = false;
                    chk_exonerado.Enabled = false;
                    RequiredFieldValidator5.Enabled = false;
                    RequiredFieldValidator6.Enabled = false;
                    RequiredFieldValidator7.Enabled = false;
                    CompareValidator1.Enabled = false;
                    CompareValidator2.Enabled = false;
                    CompareValidator3.Enabled = false;
                    RangeValidator1.Enabled = false;
                    RangeValidator2.Enabled = false;
                    RangeValidator3.Enabled = false;
                }
                else if (opcion == 1)
                {
                    txt_cantidad.Enabled = true;
                    txt_descuento.Enabled = true;
                    txt_costo.Enabled = true;
                    chk_exonerado.Enabled = true;
                    RequiredFieldValidator5.Enabled = true;
                    RequiredFieldValidator6.Enabled = true;
                    RequiredFieldValidator7.Enabled = true;
                    CompareValidator1.Enabled = true;
                    CompareValidator2.Enabled = true;
                    CompareValidator3.Enabled = true;
                    RangeValidator1.Enabled = true;
                    RangeValidator2.Enabled = true;
                    RangeValidator3.Enabled = true;
                }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }

        }
        private void Limpiar_Cajas()
        {
            Session["dt"] = null;
            gv_productos.DataSource = Session["dt"];
            gv_productos.DataBind();
            txt_subtotal.Text = String.Empty;
            txt_totalDescuento.Text = String.Empty;
            txt_impuestoTotal.Text = String.Empty;
            txt_total.Text = String.Empty;            

        }
        private String convertirFecha(string fecha)
        {
            try
            {
                string fechaNueva = string.Empty;
                string mes = fecha.Substring(0, 2);
                string dia = fecha.Substring(3, 2);
                string año = fecha.Substring(6, 4);
                fechaNueva = dia + "/" + mes + "/" + año;
                if (Convert.ToDateTime(fechaNueva) < DateTime.Now.Date)
                {
                    string mensaje = "<script type='text/javascript'> smoke.alert('No se pueden realizar pedidos con fechas anteriores', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", mensaje, false);
                    return DateTime.Now.Date.ToShortDateString();
                }
                else
                    return fechaNueva;
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; return String.Empty; }
        }
        #endregion
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                    this.Carga_Datos();
                    if (Request.QueryString["idProv"] != null)
                    {
                        txt_idProveedor.Text = Request.QueryString["idProv"];
                        txt_nombre_proveedor.Text = Request.QueryString["nomProv"];
                        txt_plazo.Text = Request.QueryString["plazo"];
                        
                    }

                    if (Request.QueryString["idProd"] != null)
                    {
                        txt_idProveedor.Text = Request.QueryString["idProv"];
                        txt_nombre_proveedor.Text = Request.QueryString["nomProv"];
                        txt_plazo.Text = Request.QueryString["plazo"];

                        txt_id_articulo.Text = Request.QueryString["idProd"];
                        txt_cod_articulo.Text = Request.QueryString["codProd"];
                        txt_nombre_articulo.Text = Request.QueryString["nomProd"];

                        this.deshabilitarHabilitarCampos(1);

                        this.Obtener_Datos_Producto();
                    }

                    if (txt_idProveedor.Text != String.Empty)
                    {
                        Panel2.Enabled = true;

                    }
                }
                catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
            }
        }
        protected void ib_buscar_proveedor_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                int bandera = 1;
                this.Transferir_Datos();
                Response.Redirect("wbfrm_Buscar_Proveedor.aspx?bandera=" + bandera);
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }
        
        protected void ib_buscar_producto_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this.Transferir_Datos();
                Response.Redirect("wbfrm_Buscar_Producto.aspx?idProv=" + txt_idProveedor.Text + "&nomProv=" + txt_nombre_proveedor.Text + "&plazo=" + txt_plazo.Text);
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; } 
        }

        protected void chk_exonerado_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (chk_exonerado.Checked)
                {
                    txt_impuesto.Text = "0";
                }
                else
                {
                    _producto.IdUsuarioInicioSeccion = Convert.ToInt32(HttpContext.Current.Session["idUsuario"].ToString());
                    _producto.IdProducto = Convert.ToInt32(txt_id_articulo.Text);
                    _producto = (WCF_Gimnasio.cls_Producto)_servicio.TraerObjeto(_producto);
                    txt_impuesto.Text = string.Format("{0:N}", Convert.ToDecimal(_producto.Impuesto));
                }
            }
            catch (Exception ex) { lbl_mensaje.Text = ex.Message; }
        }

        protected void b_agregar_Click(object sender, EventArgs e)
        {
            this.Agregar_Producto_Grid();
        }

        protected void b_limpiar_Click(object sender, EventArgs e)
        {
            this.limpiarFormulario();
        }

        protected void b_borrar_Click(object sender, EventArgs e)
        {
            this.Borrar_Linea();
        }

        protected void b_actualizar_Click(object sender, EventArgs e)
        {
            actualizarLineaGrid();
        }

        protected void b_guardar_Click(object sender, EventArgs e)
        {
            this.finalizarPedidoProveedor();

        }
        protected void gv_productos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            this.activaBotonesAgregarMoficar(Convert.ToInt32(e.CommandArgument));
        }

        protected void txt_costo_TextChanged(object sender, EventArgs e)
        {
            this.calculaPrecioProducto();
        }

        protected void txt_utilidad_TextChanged(object sender, EventArgs e)
        {
            this.calculaPrecioProducto();
        }

        protected void txt_fecha_TextChanged(object sender, EventArgs e)
        {
            txt_fecha.Text = this.convertirFecha(txt_fecha.Text);
        }

    }
}